package com.bci.pwtz.controller;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.bci.pwtz.common.util.PaginationList;
import com.bci.pwtz.common.util.PwtzUtils;
import com.bci.pwtz.exception.CanNotDeleteException;
import com.bci.pwtz.exception.PwtzDatabaseException;
import com.bci.pwtz.mysql.model.CompanyUser;
import com.bci.pwtz.mysql.model.Dysydlbhq;
import com.bci.pwtz.mysql.model.Dyxl;
import com.bci.pwtz.service.BusinessCommonService;
import com.bci.pwtz.service.DysydlbhqService;
import com.bci.pwtz.service.DyxlService;

@Controller
@RequestMapping("/user/dysydlbhq")
public class DysydlbhqController extends AbstractController
{
@Autowired
private DysydlbhqService service;
@Autowired
private DyxlService rService;
@Autowired
private BusinessCommonService businessCommonService;

@RequestMapping(value="list",method=RequestMethod.POST)
@ResponseBody
public PaginationList<Dysydlbhq> list(String parentDeviceId,String deviceName,int pageSize,int pageNo){
    PaginationList<Dysydlbhq> list=new PaginationList<Dysydlbhq>();
    try
    {
        Long companyid=getLastCompanyId();
        list=service.findDysydlbhq(deviceName, companyid, 0, null, parentDeviceId, null, null, pageSize, pageNo);
        if(list!=null&&list.getTotalRecord()>0){
            for(Dysydlbhq d:list.getRecords()){
                Dyxl obj=rService.load(d.getLinecode());
                d.setLinecode(obj.getDevicename());
            }
        }
    }
    catch (PwtzDatabaseException e)
    {
        e.printStackTrace();
    }
    return list;
}
@RequestMapping(value="load",method=RequestMethod.POST)
@ResponseBody
public Dysydlbhq load(String deviceid){
    Dysydlbhq rtObj=new Dysydlbhq();
    try
    {
        if(deviceid!=null){
            rtObj=service.load(deviceid);
        }
    }
    catch (PwtzDatabaseException e)
    {
        e.printStackTrace();
    }
    return rtObj;
}

@RequestMapping(value = "/edite", method = RequestMethod.POST)
@ResponseBody
public Map<String, String> edite(String data)
{
    Map<String, String> map = new HashMap<String, String>();
    try
    {
        //data=java.net.URLDecoder.decode(data,"UTF-8");
        String [] list=decodeURL(data.split("&"));
        for(int i=0;i<list.length;i++){
            String[] array=list[i].split("=");
            if(array.length==1){
                map.put(array[0], "");
            }else{
                map.put(array[0], array[1]);
            }
        }
        int retCount = businessCommonService.getCountByDeviceName(getLastCompanyId(),(long)AbstractController.低压剩余电流保护器, map.get("devicename"),map.get("deviceid"));
        if(retCount>0){
            map = packageAjaxReturnMap(ERROR_VALUE_OP_RESULT_FAIL, ERROR_VALUE_MSG_TYPE_ERROR, null, "名称已存在！");
            return map;
        }
        CompanyUser user=(CompanyUser) session.getAttribute("user");
        Dysydlbhq device=new Dysydlbhq();
        device.setDeviceid(map.get("deviceid"));
        device.setDevicename(map.get("devicename"));
        device.setAltitude(map.get("altitude"));
        device.setCommissioningdate(map.get("commissioningdate"));
        device.setCompanyid(user.getLastCompanyId());
        device.setCreateid(user.getCompanyUserId());
        device.setDevicenumber(map.get("devicenumber"));
        device.setEquipmentstate(map.get("equipmentstate"));
        device.setFactorydate(map.get("factorydate"));
        device.setLastoperatorid(user.getCompanyUserId());
        device.setLatitude(map.get("latitude"));
        device.setLinecode(map.get("linecode"));
        device.setLocalcity(map.get("localcity"));
        device.setLongitude(map.get("longitude"));
        device.setMaintenanceteam(map.get("maintenanceteam"));
        device.setModel(map.get("model"));
        device.setOperationstate(map.get("operationstate"));
        device.setOperationunit(map.get("operationunit"));
        device.setProductionfactory(map.get("productionfactory"));
        device.setSerialnumber(map.get("serialnumber"));
        device.setSyncstatus(0);
        device.setVoltagelevel(map.get("voltagelevel"));
        device.setCurrentsettingvalue(PwtzUtils.passDouble(map.get("currentsettingvalue")));
        device.setGiscode(map.get("giscode"));
        device.setPredevicecode(map.get("predevicecode"));
        device.setPredevicetype(PwtzUtils.passInt(map.get("predevicetype")));
        device.setRatedcurrent(PwtzUtils.passDouble(map.get("ratedcurrent")));
        device.setRatedvoltage(map.get("ratedvoltage"));
        device.setDelayseconds(new Long(PwtzUtils.passLong(map.get("delayseconds"))));
        int ret = service.update(device);
        if (ret > 0)
        {
            setLog(device.getDeviceid(), device.getCompanyid(), AbstractController.低压剩余电流保护器, AbstractController.update, "修改低压剩余电流保护器["+device.getDevicename()+"]成功", getUserId());
            map = packageAjaxReturnMap(ERROR_VALUE_OP_RESULT_SUCCESS, ERROR_VALUE_MSG_TYPE_INFO, null, "编辑低压剩余电流保护器成功");
            map.put("deviceid", device.getDeviceid());
        }
        else
        {
            map = packageAjaxReturnMap(ERROR_VALUE_OP_RESULT_FAIL, ERROR_VALUE_MSG_TYPE_ERROR, null, "编辑低压剩余电流保护器失败");
        }
    }
    catch (PwtzDatabaseException e)
    {
        map = packageException(e);
    }
    catch (UnsupportedEncodingException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return map;
}

@RequestMapping(value = "/add", method = RequestMethod.POST)
@ResponseBody
public Map<String, String> add(String data)
{
    Map<String, String> map = new HashMap<String, String>();
    try
    {
        //data=java.net.URLDecoder.decode(data,"UTF-8");
        String [] list=decodeURL(data.split("&"));
        for(int i=0;i<list.length;i++){
            String[] array=list[i].split("=");
            if(array.length==1){
                map.put(array[0], "");
            }else{
                map.put(array[0], array[1]);
            }
        }
        int retCount = businessCommonService.getCountByDeviceName(getLastCompanyId(),(long)AbstractController.低压剩余电流保护器, map.get("devicename"));
        if(retCount>0){
            map = packageAjaxReturnMap(ERROR_VALUE_OP_RESULT_FAIL, ERROR_VALUE_MSG_TYPE_ERROR, null, "名称已存在！");
            return map;
        }
        CompanyUser user=(CompanyUser) session.getAttribute("user");
        Dysydlbhq device=new Dysydlbhq();
        UUID uuid=UUID.randomUUID();
        device.setDeviceid(uuid.toString());
        device.setDevicename(map.get("devicename"));
        device.setAltitude(map.get("altitude"));
        device.setCommissioningdate(map.get("commissioningdate"));
        device.setCompanyid(user.getLastCompanyId());
        device.setCreateid(user.getCompanyUserId());
        device.setDevicenumber(map.get("devicenumber"));
        device.setEquipmentstate(map.get("equipmentstate"));
        device.setFactorydate(map.get("factorydate"));
        device.setLastoperatorid(user.getCompanyUserId());
        device.setLatitude(map.get("latitude"));
        device.setLinecode(map.get("linecode"));
        device.setLocalcity(map.get("localcity"));
        device.setLongitude(map.get("longitude"));
        device.setMaintenanceteam(map.get("maintenanceteam"));
        device.setModel(map.get("model"));
        device.setOperationstate(map.get("operationstate"));
        device.setOperationunit(map.get("operationunit"));
        device.setProductionfactory(map.get("productionfactory"));
        device.setSerialnumber(map.get("serialnumber"));
        device.setSyncstatus(0);
        device.setVoltagelevel(map.get("voltagelevel"));
        device.setCurrentsettingvalue(PwtzUtils.passDouble(map.get("currentsettingvalue")));
        device.setGiscode(map.get("giscode"));
        device.setPredevicecode(map.get("predevicecode"));
        device.setPredevicetype(PwtzUtils.passInt(map.get("predevicetype")));
        device.setRatedcurrent(PwtzUtils.passDouble(map.get("ratedcurrent")));
        device.setRatedvoltage(map.get("ratedvoltage"));
        device.setDelayseconds(new Long(PwtzUtils.passLong(map.get("delayseconds"))));
        Dysydlbhq ret = service.add(device);
        if (ret !=null)
        {
            setLog(device.getDeviceid(), device.getCompanyid(), AbstractController.低压剩余电流保护器, AbstractController.add, "添加低压剩余电流保护器["+device.getDevicename()+"]成功", getUserId());
            map = packageAjaxReturnMap(ERROR_VALUE_OP_RESULT_SUCCESS, ERROR_VALUE_MSG_TYPE_INFO, null, "添加低压剩余电流保护器成功");
            map.put("deviceid", device.getDeviceid());
        }
        else
        {
            map = packageAjaxReturnMap(ERROR_VALUE_OP_RESULT_FAIL, ERROR_VALUE_MSG_TYPE_ERROR, null, "添加低压剩余电流保护器失败");
        }
    }
    catch (PwtzDatabaseException e)
    {
        map = packageException(e);
    }
    catch (UnsupportedEncodingException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return map;
}
@RequestMapping(value="/delete",method=RequestMethod.POST)
@ResponseBody
public Map<String,String> delete(String deviceid){
    Map<String,String> map=new HashMap<String, String>();
    int result=0;
    try
    {
        Dysydlbhq device=service.load(deviceid);
        result=service.delete(deviceid);
        if (result>0&&device!=null)
        {
            setLog(device.getDeviceid(), device.getCompanyid(), AbstractController.低压剩余电流保护器, AbstractController.delete, "删除低压剩余电流保护器["+device.getDevicename()+"]成功", getUserId());
            map = packageAjaxReturnMap(ERROR_VALUE_OP_RESULT_SUCCESS, ERROR_VALUE_MSG_TYPE_INFO, null, "删除低压剩余电流保护器成功");
        }
        else
        {
            map = packageAjaxReturnMap(ERROR_VALUE_OP_RESULT_FAIL, ERROR_VALUE_MSG_TYPE_ERROR, null, "删除低压剩余电流保护器失败");
        }
    }
    catch (PwtzDatabaseException e)
    {
        map = packageException(e);
    }
    catch (CanNotDeleteException e)
    {
        map = packageException(e);
    }
    return map;
}
}